1. 与主站通信协议
{
    使用mqtt通信协议,qos等级为0, cid 为 cid_NIC510_daddr (daddr为设备地址,10进数字)

    
    负载格式
    
    控制码  内容地址
    00      01    02    03    04    05   06
    C       ADDRL ADDRH DLENL DLENH DATA CS
    
    C = 控制码 ,主动发出的最高位为0,回复内容最高位为1
    
      0 = 读参数
      1 = 写参数
      2 = 读状态
      3 = 控制
      
    
    1 发布内容 --- 主题 P/NIC510/daddr 
    {
        1. 设备主动上报状态
        {
            02 00 00 DLENL DLENH DATA CS
        }
        
        2. 设备回复状态
        {
            82 ADDRL ADDRH DLENL DLENH DATA CS
        }
        
        3. 设备回复读参数
        {
            80 ADDRL ADDRH DLENL DLENH DATA CS
        }
        
        4. 设备回复写参数
        {
            81 ADDRL ADDRH 01 00 RESULT CS
            
            RESULT = 0 成功
                   = 其他 失败原因
        }
        
        5. 设备回复控制
        {
            1. 设备回复读取时间 Addr = 0 
            {
                83 00 00 06 00 16 01 10 12 10 22 CS
                
                16年1月10日12时10分22秒
            }
            2. 设备回复设置时间 Addr = 1
            {
                83 01 00 01 00 RESULT CS
                
                RESULT = 0 设置成功
                       = 1 时间非法
            }
            3. 设备回复文件传输 Addr = 2
            {
                83 02 00 01 00 RESULT CS

                RESULT = 0 开始传输
                       = 1 错误                
            }
            4. 设备回复注册 Addr = 3
            {
                83 03 00 01 00 RESULT CS
                
                RESULT = 0 注册成功
                       = 1 注册失败
            }
            5. 设备回复分配地址 Addr = 4
            {
                83 04 00 01 00 RESULT CS
                
                RESULT = 0 正确
                       = 1 错误   
            }
        }
        6.设备主动请求校时/最新固件信息
        {
            1. 校时 Addr = 0 
            {
                03 00 00 00 00 CS
            }
			2. 最新固件 Addr = 1 
            {
                03 00 01 00 00 CS              
            }
        }

    }
    
    2. 订阅内容 --- 主题 S/NIC510/daddr 
    {
        1. 平台下发读取参数
        {
            00 ADDRL ADDRH DLENL DLENH CS
        }
        2. 平台下发写参数
        {
            01 ADDRL ADDRH DLENL DLENH DATA CS
        }
        3. 平台下发读取状态
        {
            02 ADDRL ADDRH DLENL DLENH CS
        }
        4. 控制命令
        {
            1. 平台下发读取时间 Addr = 0 
            {
                03 00 00 06 00 CS
            }
            2. 平台下发设置时间 Addr = 1
            {
                03 01 00 06 00 16 01 10 12 10 22 CS                
            }
            3. 平台下发文件传输 Addr = 2
            {
                03 02 00 DLENL DLENH filePathName CS
                03 02 00 39 00 68 74 74 70 3A 2F 2F 31 32 30 2E 37 39 2E 32 34 38 2E 32 36 3A 31 36 36 39 31 2F 66 69 6C 65 73 2F 75 70 4A 49 43 31 32 5F 56 30 32 30 31 54 30 31 32 30 32 30 30 38 30 34 B6
                
                http://120.79.248.26:16691/files/upJIC12_V0201T0120200804
                0302003900687474703A2F2F3132302E37392E3234382E32363A31363639312F66696C65732F75704A494331325F56303230315430313230323030383034B6
            }
            4. 平台下发注册设备 Addr = 3
            {
                03 03 00 DLENL DLENH REGXXXXXXXX(ASCII 35Bytes) CS
                
            }
            5. 平台下发分配地址及设置时间 Addr = 4
            {
                03 04 00 DLENL DLENH DADDR0 DADDR1 DADDR2 DADDR3 YY MM DD hh mm ss CS
                
                DADDR = 1, 那么 DADDR0=1,DADDR1=0,DADDR2=0,DADDR3=0
                YY MM DD hh mm ss = 0x20 0x11 0x09 0x14 0x53 0x30 表示 20年11月9日14点53分30秒
            }
            6. 平台端写说明书url Addr = 5 //V20250528A版本及以上新增此接口
            {
                03 05 00 DLENL DLENH url CS
                03 05 00 39 00 68 74 74 70 3A 2F 2F 31 32 30 2E 37 39 2E 32 34 38 2E 32 36 3A 31 36 36 39 31 2F 66 69 6C 65 73 2F 75 70 4A 49 43 31 32 5F 56 30 32 30 31 54 30 31 32 30 32 30 30 38 30 34 B9
            }
        }
		5.平台回复状态确认
		{
			82 00 00 01 00 RESULT CS
						   RESULT = 0 成功
                       	          = 1 失败
		}
        6.平台回复设备请求 校时/最新固件信息 //V20250530A版本及以上新增此接口
		{
            1. 校时 Addr = 0 
            {
                83 00 00 06 00 y m d h m s CS
            }
			2. 最新固件 Addr = 1 
            {
                83 00 01 dlenL dlenH   01 00                   xx xx xx xx xx xx xx xx... CS
                                       U16 verNum固件版本数值   固件下载地址 (ASCII) 
                说明:如果平台回复的verNum大于设备的verNum,则设备会显示有新的固件,用户点击确认升级则下载固件,设备会下载固件并重启升级
            }
		}
    }
}










#define     PID                         0x13521009      //33

#define     STATE_REV_NUM               256

#define     MAX_TEMP                    600
#define     MIN_TEMP                    -300
#define     MAX_HUMI                    1000
#define     MIN_HUMI                    0
#define     MAX_NH3                     10000
#define     MAX_CO2                     10000
#define     MAX_LIGHT                   10000
#define     MAX_PRESSURE                30000
#define     MIN_PRESSURE                -30000
#define     MAX_DPS                     30000
#define     MIN_DPS                     -30000
#define     FLASH_S32                   0x7FFFFFFF
#define     MODE_FIX                    0
#define     MODE_FIGURE                 1

#define     NUM_MAX_PC                  40          //最大可调(0-10V)输出
#define     NUM_MAX_COOL                12          //水泵组数
//#define     NUM_MAX_SPRAY             6           //喷雾组数
#define     NUM_MAX_HEAT                6           //加热组数
#define     NUM_MAX_TIMER               4           //定时组数
#define     NUM_MAX_LIGHT               4           //照明组数
#define     NUM_MAXTAB_DAY              10          //最大日龄点数
#define     NUM_MAX_ROOM                2           //最大房间数
#define     NUM_DTTIME                  4           //温度偏移最大项
#define     NUM_PM                      4           //电位计数量
#define     NUM_PIGNEED_HUMI            4           //猪只需求湿度点
#define     NUM_MAX_FANLEVEL            30          //最大通风等级
#define     NUM_MAX_FFAN                60          //最大定速风机
#define     NUM_MAX_VFAN                32          //最大变速风机
#define     NUM_MAX_INPORT              6           //最大进风口
#define     NUM_MAX_OUTPORT             6           //最大出风口
#define     NUM_MAX_EXMODULE            8           //最大扩展模块数
#define     NUM_TEMP                    8           //最大温度探头
#define     NUM_420MA                   4           //4-20mA探头数量
#define     NUM_S485                    6           //485探头数量
#define     NUM_DI                      2           //脉冲输入
#define     NUM_MAX_DITAB               10          //测风风量表
#define     NUM_MAX_METER               6           //仪表数量
#define     NUM_VFCP                    4           //变频风机风量点
#define     NUM_VFTAB                   4           //变频风机风量表数
#define     NUM_DITAB                   4           //脉冲测风风量表数
#define     NUM_PN_TEMP                 6           //

#define     NUM_EX_RELAY                10
#define     NUM_MB_RELAY                12


enum __EALMTYPE {ALARM_TYPE_TEMP_MAX_1,ALARM_TYPE_TEMP_MAX_2,ALARM_TYPE_TEMP_MIN_1,ALARM_TYPE_TEMP_MIN_2,ALARM_TYPE_DTEMP_MAX_1,
    ALARM_TYPE_DTEMP_MAX_2,ALARM_TYPE_DTEMP_MIN_1,ALARM_TYPE_DTEMP_MIN_2,ALARM_TYPE_HUMI_MAX_1,ALARM_TYPE_HUMI_MAX_2,
    ALARM_TYPE_HUMI_MIN_1,ALARM_TYPE_HUMI_MIN_2,ALARM_TYPE_NH3_MAX_1,ALARM_TYPE_NH3_MAX_2,ALARM_TYPE_CO2_MAX_1,ALARM_TYPE_CO2_MAX_2,
    ALARM_TYPE_HIGH_DPS_1,ALARM_TYPE_HIGH_DPS_2,ALARM_TYPE_LOW_DPS_1,ALARM_TYPE_LOW_DPS_2,ALARM_TYPE_DPS_EXHIGH,ALARM_TYPE_DPS_EXLOW,
    ALARM_TYPE_SENSOR_TEMP1,ALARM_TYPE_SENSOR_TEMP2,ALARM_TYPE_SENSOR_TEMP3,ALARM_TYPE_SENSOR_TEMP4,ALARM_TYPE_SENSOR_TEMP5,ALARM_TYPE_SENSOR_TEMP6,
    ALARM_TYPE_SENSOR_TEMP7,ALARM_TYPE_SENSOR_TEMP8,ALARM_TYPE_SENSOR_420MA1,ALARM_TYPE_SENSOR_420MA2,ALARM_TYPE_SENSOR_420MA3,
    ALARM_TYPE_SENSOR_420MA4,ALARM_TYPE_SENSOR_485_1,ALARM_TYPE_SENSOR_485_2,ALARM_TYPE_SENSOR_485_3,ALARM_TYPE_SENSOR_485_4,
    ALARM_TYPE_SENSOR_485_5,ALARM_TYPE_SENSOR_485_6,
    
    ALARM_TYPE_VFAN1,ALARM_TYPE_VFAN2,ALARM_TYPE_VFAN3,ALARM_TYPE_VFAN4,ALARM_TYPE_VFAN5,
    ALARM_TYPE_VFAN6,ALARM_TYPE_VFAN7,ALARM_TYPE_VFAN8,ALARM_TYPE_VFAN9,ALARM_TYPE_VFAN10,
    ALARM_TYPE_VFAN11,ALARM_TYPE_VFAN12,ALARM_TYPE_VFAN13,ALARM_TYPE_VFAN14,ALARM_TYPE_VFAN15,ALARM_TYPE_VFAN16,
    ALARM_TYPE_VFAN17,ALARM_TYPE_VFAN18,ALARM_TYPE_VFAN19,ALARM_TYPE_VFAN20,ALARM_TYPE_VFAN21,ALARM_TYPE_VFAN22,
    ALARM_TYPE_VFAN23,ALARM_TYPE_VFAN24,ALARM_TYPE_VFAN25,ALARM_TYPE_VFAN26,ALARM_TYPE_VFAN27,ALARM_TYPE_VFAN28,
    ALARM_TYPE_VFAN29,ALARM_TYPE_VFAN30,ALARM_TYPE_VFAN31,ALARM_TYPE_VFAN32,
    
    ALARM_TYPE_VFANST1,ALARM_TYPE_VFANST2,ALARM_TYPE_VFANST3,ALARM_TYPE_VFANST4,ALARM_TYPE_VFANST5,
    ALARM_TYPE_VFANST6,ALARM_TYPE_VFANST7,ALARM_TYPE_VFANST8,ALARM_TYPE_VFANST9,ALARM_TYPE_VFANST10,
    ALARM_TYPE_VFANST11,ALARM_TYPE_VFANST12,ALARM_TYPE_VFANST13,ALARM_TYPE_VFANST14,ALARM_TYPE_VFANST15,
    ALARM_TYPE_VFANST16,ALARM_TYPE_VFANST17,ALARM_TYPE_VFANST18,ALARM_TYPE_VFANST19,ALARM_TYPE_VFANST20,
    ALARM_TYPE_VFANST21,ALARM_TYPE_VFANST22,ALARM_TYPE_VFANST23,ALARM_TYPE_VFANST24,ALARM_TYPE_VFANST25,
    ALARM_TYPE_VFANST26,ALARM_TYPE_VFANST27,ALARM_TYPE_VFANST28,ALARM_TYPE_VFANST29,ALARM_TYPE_VFANST30,
    ALARM_TYPE_VFANST31,ALARM_TYPE_VFANST32,
    
    ALARM_TYPE_VFANPC1,ALARM_TYPE_VFANPC2,ALARM_TYPE_VFANPC3,ALARM_TYPE_VFANPC4,ALARM_TYPE_VFANPC5,
    ALARM_TYPE_VFANPC6,ALARM_TYPE_VFANPC7,ALARM_TYPE_VFANPC8,ALARM_TYPE_VFANPC9,ALARM_TYPE_VFANPC10,
    ALARM_TYPE_VFANPC11,ALARM_TYPE_VFANPC12,ALARM_TYPE_VFANPC13,ALARM_TYPE_VFANPC14,ALARM_TYPE_VFANPC15,
    ALARM_TYPE_VFANPC16,ALARM_TYPE_VFANPC17,ALARM_TYPE_VFANPC18,ALARM_TYPE_VFANPC19,ALARM_TYPE_VFANPC20,
    ALARM_TYPE_VFANPC21,ALARM_TYPE_VFANPC22,ALARM_TYPE_VFANPC23,ALARM_TYPE_VFANPC24,ALARM_TYPE_VFANPC25,
    ALARM_TYPE_VFANPC26,ALARM_TYPE_VFANPC27,ALARM_TYPE_VFANPC28,ALARM_TYPE_VFANPC29,ALARM_TYPE_VFANPC30,
    ALARM_TYPE_VFANPC31,ALARM_TYPE_VFANPC32,
    
    ALARM_TYPE_EXMOFL1,ALARM_TYPE_EXMOFL2,ALARM_TYPE_EXMOFL3,ALARM_TYPE_EXMOFL4,ALARM_TYPE_EXMOFL5,
    ALARM_TYPE_EXMOFL6,ALARM_TYPE_EXMOFL7,ALARM_TYPE_EXMOFL8,
    ALARM_TYPE_FBWINDALM1,ALARM_TYPE_FBWINDALM2,
    ALARM_TYPE_PM1,ALARM_TYPE_PM2,ALARM_TYPE_PM3,ALARM_TYPE_PM4,
    ALARM_TYPE_BATLOW,ALARM_TYPE_NOAC,ALARM_TYPE_TEST,ALARM_TYPE_MANTEST,
    ALARM_TYPE_ALA,ALARM_TYPE_TEMPDIF1,ALARM_TYPE_TEMPDIF2};
    
#define     NUM_MAX_ALARM                 (ALARM_TYPE_TEMPDIF2+1)

const QStringList alarm_name={"房间1绝对高温报警","房间2绝对高温报警","房间1绝对低温报警","房间2绝对低温报警","房间1温差高报警",
"房间2温差高报警","房间1温差低报警","房间2温差低报警","房间1湿度高报警","房间2湿度高报警",
"房间1湿度低报警","房间2湿度低报警","房间1氨气高报警","房间2氨气高报警","房间1二氧化碳高报警","房间2二氧化碳高报警",
"房间1高压差报警","房间2高压差报警","房间1低压差报警","房间2低压差报警","外部高压差报警","外部低压差报警",
"温度传感器1报警","温度传感器2报警","温度传感器3报警","温度传感器4报警","温度传感器5报警","温度传感器6报警",
"温度传感器7报警","温度传感器8报警","420mA传感器1报警","420mA传感器2报警","420mA传感器3报警","420mA传感器4报警",
"485传感器1报警","485传感器2报警","485传感器3报警","485传感器4报警","485传感器5报警","485传感器6报警",

"变频风机1离线","变频风机2离线","变频风机3离线","变频风机4离线","变频风机5离线",
"变频风机6离线","变频风机7离线","变频风机8离线","变频风机9离线","变频风机10离线",
"变频风机11离线","变频风机12离线","变频风机13离线","变频风机14离线","变频风机15离线",
"变频风机16离线","变频风机17离线","变频风机18离线","变频风机19离线","变频风机20离线",
"变频风机21离线","变频风机22离线","变频风机23离线","变频风机24离线","变频风机25离线",
"变频风机26离线","变频风机27离线","变频风机28离线","变频风机29离线","变频风机30离线",
"变频风机31离线","变频风机32离线",

"变频风机1故障","变频风机2故障","变频风机3故障","变频风机4故障","变频风机5故障",
"变频风机6故障","变频风机7故障","变频风机8故障","变频风机9故障","变频风机10故障",
"变频风机11故障","变频风机12故障","变频风机13故障","变频风机14故障","变频风机15故障",
"变频风机16故障","变频风机17故障","变频风机18故障","变频风机19故障","变频风机20故障",
"变频风机21故障", "变频风机22故障","变频风机23故障","变频风机24故障","变频风机25故障",
"变频风机26故障","变频风机27故障","变频风机28故障","变频风机29故障","变频风机30故障",
"变频风机31故障","变频风机32故障",

"变频风机1输出错误","变频风机2输出错误","变频风机3输出错误","变频风机4输出错误","变频风机5输出错误",
"变频风机6输出错误","变频风机7输出错误","变频风机8输出错误","变频风机9输出错误","变频风机10输出错误",
"变频风机11输出错误","变频风机12输出错误","变频风机13输出错误","变频风机14输出错误","变频风机15输出错误",
"变频风机16输出错误","变频风机17输出错误","变频风机18输出错误","变频风机19输出错误","变频风机20输出错误",
"变频风机21输出错误", "变频风机22输出错误","变频风机23输出错误","变频风机24输出错误","变频风机25输出错误",
"变频风机26输出错误","变频风机27输出错误","变频风机28输出错误","变频风机29输出错误","变频风机30输出错误",
"变频风机31输出错误","变频风机32输出错误",

"拓展盒1离线","拓展盒2离线","拓展盒3离线","拓展盒4离线","拓展盒5离线","拓展盒6离线","拓展盒7离线","拓展盒8离线",
"房间1风量未达报警","房间2风量未达报警",
"电位计1超时报警","电位计2超时报警","电位计3超时报警","电位计4超时报警",
"电池电量低报警","无交流电报警","定时自检报警","手动测试报警",
"外部报警","房间1探头温差大报警","房间2探头温差大报警"};
    
#pragma pack(1)
typedef struct
{
    U8   version[6];                        //版本号
    U8   dateTime[6];                       //IO板日期时间
    U16  crcPara;                           //参数内容校验

    //通风
    U8   fanLevel[NUM_MAX_ROOM];            //通风等级最终数值
    U8   windLevel[NUM_MAX_ROOM];           //温度通风等级
    U8   co2Add[NUM_MAX_ROOM];              //CO2附加通风比例
    U8   nh3Add[NUM_MAX_ROOM];              //NH3附加通风比例
    U16  gday[NUM_MAX_ROOM];                //日龄
    U16  targetTemp[NUM_MAX_ROOM];          //目标温度
    U16  targetTempCool[NUM_MAX_ROOM];      //目标温度冷
    U16  targetTempHeat[NUM_MAX_ROOM];      //目标温度热
    U32  targetPAVMin[NUM_MAX_ROOM];        //目标最小风量单个
    U32  targetPAVMax[NUM_MAX_ROOM];        //目标最大风量单个
    U32  targetPAVTar[NUM_MAX_ROOM];        //目标目标风量单个

    S16  targetOffset[NUM_MAX_ROOM];        //目标温度偏移
    U32  avTarget[NUM_MAX_ROOM];            //目标通风量
    U32  avNow[NUM_MAX_ROOM];               //实际总通风量
    S32  avPNow[NUM_MAX_ROOM];              //实际总正风量


    //温度传感器
    S16  tempAvg[NUM_MAX_ROOM];             //室内平均温度
    S16  tempAvgOut[NUM_MAX_ROOM];          //室外平均温度
    S16  tempFinal[NUM_TEMP];               //温度最终数值
    S16  tempOrigin[NUM_TEMP];              //温度原始数值

    //4-20mA传感器
    U16  in420Final[NUM_420MA];             //4-20mA最终数值
    U16  in420Origin[NUM_420MA];            //4-20mA原始数值

    //rs485传感器
    S32  sensor485[NUM_S485];               //485传感器数值

    //传感器
    U16  humiInAvg[NUM_MAX_ROOM];           //室内湿度平均
    U16  humiOutAvg[NUM_MAX_ROOM];          //室外湿度平均
    U16  co2Avg[NUM_MAX_ROOM];              //二氧化碳平均
    U16  nh3Avg[NUM_MAX_ROOM];              //氨气平均
    S16  dpsAvg[NUM_MAX_ROOM];              //压差探头平均
    S16  exDpsAvg;                          //室外压差探头平均

    //输出
    U8   pcVFan[NUM_MAX_VFAN];              //变频风机输出数值 0-100%
    U8   fFan[NUM_MAX_FFAN/8];              //每位表示一个固定风机的输出状态

    //进风口排风口目标值
    U8   posPortDes[NUM_MAX_INPORT+NUM_MAX_OUTPORT];         //风口位置 0-100%
    U8   posPortNow[NUM_MAX_INPORT+NUM_MAX_OUTPORT];         //风口位置实际

    //制冷输出
    U8   coolOut[NUM_MAX_COOL];
    //加热输出
    U8   heatOut[NUM_MAX_HEAT];
    //照明输出
    U8   lightOut[NUM_MAX_LIGHT];
    //定时器输出
    U8   timerOut[NUM_MAX_TIMER];
    //仪表读数
    U32  meterVal[NUM_MAX_METER];

    //继电器输出
    U8   relayState[12];                    //每bit代表1个继电器状态 12x8 = 96 , 最大本机12,模块8x10=80，最大92
    //可调输出
    U8   pcState[NUM_MAX_PC];               //每个表示一个输出百分比
    //报警
    U8   alarmState[32];                    //每bit代表1种报警类型

    U16  volBAT;                            //电池电压
    U16  volIN;                             //0-10V输入

    U32  cntWindCycle[NUM_MAX_ROOM];        //通风动作周期计数器 0.1秒
    U32  cntWindTurn[NUM_MAX_ROOM];         //通风动作轮流计数器 0.1秒
    U16  cntAQC[NUM_DI];                    //AQC1,AQC2脉冲数
    U16  cntWaterCLK;                       //水表脉冲数
    U16  cntALA;                            //ALA脉冲数
    U16  adPM[NUM_PM];                      //电位计AD数值 0-4096
    U8   ACOK;                              //交流是否正常信号
    //-------240912
    U8   windStage[NUM_MAX_ROOM];           //通风阶段 0=最小通风 1=线性通风 2=最大通风 3=猪只通风模式
    U16  vf_ECode[NUM_MAX_VFAN];            //485变频压风机故障码
    U8   vf_Data[NUM_MAX_VFAN][14];         //485变频风机其他状态数据
    U8   vf_TO[NUM_MAX_VFAN];               //485变频风机通信超时
    U8   vf_ErrPC[NUM_MAX_VFAN];            //485变频风机输出错误
    //报警确认
    U8   alarmConfirm[32];                  //每bit代表1种报警类型确认
    U16  vf_ECBoxCode[NUM_MAX_VFAN];        //485变频压风机故障码

    U16  windSpeed[NUM_DI+NUM_S485];        //风速 m/s
    U32  windAV[NUM_DI+NUM_S485];           //风量 m3/h
    U32  windTAV[NUM_MAX_ROOM];             //总风量 m3/h
    U16  windPulse[NUM_DI];                 //脉冲频率 P/min
    U16  vFanReadPC[NUM_MAX_VFAN];          //变频风机输出数值 0-100号，两位小数

    U8   charge;                            //电池是否处于充电状态 0=放电 1=充电
    U8   exFfan;                            //定速风机57-60的开关状态位，对应bito-bit3

    U32  avInNow[NUM_MAX_ROOM];               //实际总进风量，当前正压风机的输出总和 ---20250421
    U32  avOutNow[NUM_MAX_ROOM];               //实际总排风量，当前负压风机的输出总和 ---20250421

    S16  dTemp[NUM_MAX_ROOM][NUM_MAX_FANLEVEL];//当天通风表实际温差 ---20250421


}__czqState;
#pragma pack()

#pragma pack(1)
typedef struct{

    __czqState czqstate;

    //以下参数拷贝，方便上位机解析数据
    U8  PM_mode[NUM_MAX_ROOM];              //栏舍模式 0 = 空舍 1 = 在养
    U16 PM_gDay[NUM_MAX_ROOM];              //天龄 1-999

    U8  targetMode[NUM_MAX_ROOM];                                 //0=舍内目标温度 1=猪只需求通风 2=温差通风

    U8   fan_mode;                                                  //温度控制模式 0=自设 1=阶跃曲线 2=线性曲线

    //报警设置
    S16  alm_TempHigh;                                           //高温报警
    S16  alm_TempLow;                                            //低温报警
    S16  alm_DTempHigh;                                          //高温差报警
    S16  alm_DTempLow;                                           //低温差报警
    U16  alm_DSTempMax;                                          //探头温差过大报警
    U16  alm_HumiHigh;                                           //室内高湿报警
    U16  alm_HumiLow;                                            //室内低湿报警
    S32  alm_DPSHigh;                                            //高压差报警
    S32  alm_DPSLow;                                             //低压差报警
    S32  alm_exDPSHigh;                                          //外部高压差报警
    S32  alm_exDPSLow;                                           //外部低压差报警
    U32  alm_CO2High;                                            //高二氧化碳报警
    U32  alm_NH3High;                                            //高氨气报警
    U8   almVal_SensorOL;                                        //传感器离线报警
    U8   almVal_DeviceOL;                                        //通讯设备离线报警
    U16  almVal_DeviceOLDelay;                                   //通讯设备离线报警延时 s
    U16  almVal_Delay;                                           //报警延迟 s
    U8   almVal_RepeatEn;                                        //重复提醒
    U16  almVal_RepeatTime;                                      //重复提醒时间
    U8   almVal_FanPCErr;                                        //风机输出偏差告警
    U16  almVal_CheckTime;                                       //报警自检时间点
    U8   almVal_CheckCycle;                                      //报警自检频率
    U16  almVal_CheckDuration;                                   //报警自检持续时间

    //栏舍设置
    U16  roomIdx[NUM_MAX_ROOM];                                 //房间编号
    U8   roomName[NUM_MAX_ROOM][32];                            //房间名称
    U8   roomType[NUM_MAX_ROOM];                                //房间类型
    U8   roomFanMode[NUM_MAX_ROOM];                             //房间通风方式 0正压 1微正压 2负压
    U16  roomM2[NUM_MAX_ROOM];                                  //房间截面积 1位小数

    //温度
    U8   insTemp_type[NUM_TEMP];                                  //0=未使用 1=温度
    U8   insTemp_room[NUM_TEMP];                                  //0=房间1 1=房间2 2=室外

    //4-20mA
    U8   ins420mA_type[NUM_420MA];                                //0=未使用 1=湿度 2=二氧探头 3=氨气
    U8   ins420mA_room[NUM_420MA];                                //0=房间1 1=房间2 2=室外
    S16  ins420mA_20mA[NUM_420MA];                                //20mA对应数值
    S16  ins420mA_0mA[NUM_420MA];                                 //0mA对应数值

    //RS485
    U8   insS485_type[NUM_S485];                                  //0=未使用 1=压差 2=氨气 3-风速 4-二氧化碳
    U8   insS485_module[NUM_S485];                                //型号
    U8   insS485_room[NUM_S485];                                  //0=房间1 1=房间2 2=室外

    //脉冲
    U8   insDI_type[NUM_DI];                                       //0=未使用 1=进风口风速 2=排风口风速
    U8   insDI_room[NUM_DI];                                       //0=房间1 1=房间2

    //定速风机设置
    U8   insFFan_room[NUM_MAX_FFAN];                              //0=房间1 1=房间2
    U8   insFFan_pType[NUM_MAX_FFAN];                             //类型 0=未使用 1=负压 2=正压

    //变速风机设置
    U8   insVFan_room[NUM_MAX_VFAN];                              //0=房间1 1=房间2
    U8   insVFan_pType[NUM_MAX_VFAN];                             //压力类型 0=未使用 1=负压 2=正压
    U8   insVFan_type485[NUM_MAX_VFAN];                           //485型号 0=未使用 1=EC90 ...

    //进出风口设置(前6为进风口，后6为出风口)
    U8   insPort_type[NUM_MAX_INPORT+NUM_MAX_OUTPORT];            //进风口类型 0=未使用
    U8   insPort_room[NUM_MAX_INPORT+NUM_MAX_OUTPORT];            //风口房间 0=房间1 1=房间2
    U8   insPort_posMode[NUM_MAX_INPORT+NUM_MAX_OUTPORT];         //控制方式 0=时间 1=电位计 2=可调输出

    //降温设置
    U8   insCool_type[NUM_MAX_COOL];                              //降温类型 0=未使用 1=水帘 2=喷雾 3=制冷(可调)
    U8   insCool_room[NUM_MAX_COOL];                              //0=房间1 1=房间2

    //加热设置
    U8   insHeat_type[NUM_MAX_HEAT];                              //加热类型 0=未使用 1=固定 2=可调
    U8   insHeat_room[NUM_MAX_HEAT];                              //0=房间1 1=房间2

    //灯光设置
    U8   insLight_type[NUM_MAX_LIGHT];                            //照明类型 0=未使用 1=固定 2=可调
    U8   insLight_room[NUM_MAX_LIGHT];                            //0=房间1 1=房间2

    //定时设置
    U8   insTimer_type[NUM_MAX_TIMER];                            //定时类型 0=未使用 1=固定 2=可调
    U8   insTimer_room[NUM_MAX_TIMER];                            //0=房间1 1=房间2

    //能耗仪表设置
    U8   insMeter_type[NUM_MAX_METER];          //仪表类型 0=未使用 1=用电表 2=用水表 3=饮水表 4=称重表
    U8   insMeter_if[NUM_MAX_METER];            //0=RS485 1=脉冲
    U8   insMeter_room[NUM_MAX_METER];          //0=房间1 1=房间2
    U16  insMeter_pulse[NUM_MAX_METER];         //每L脉冲数

    //通讯设置
    U32  addr;                              //控制器地址

    //拓展盒设置
    U8  exModule[NUM_MAX_EXMODULE];         //扩展盒类型 0=无 1=继电器扩展盒(DOB12)

    //通用设置
    U8  sys_room;                           //房舍数量 0=1个 1=2个
    U16 sys_hisTime;                        //数据保存时间 1-9999分钟


    U32 powerMeterVal[NUM_MAX_ROOM];                  //电表读数 0xFFFFFFFF 表示无效值 1位小数  单位 kWh
    U16 APhaseVol[NUM_MAX_ROOM];                       //A相电压 0xFFFF 表示无效值 2位小数 单位V
    U16 BPhaseVol[NUM_MAX_ROOM];                      //B相电压 0xFFFF 表示无效值 2位小数 单位V
    U16 CPhaseVol[NUM_MAX_ROOM];                      //C相电压 0xFFFF 表示无效值 2位小数 单位V
    U32 APhaseCur[NUM_MAX_ROOM];                      //A相电流 0xFFFFFFFF 表示无效值 3位小数 单位A
    U32 BPhaseCur[NUM_MAX_ROOM];                      //B相电流 0xFFFFFFFF 表示无效值 3位小数 单位A
    U32 CPhaseCur[NUM_MAX_ROOM];                      //C相电流 0xFFFFFFFF 表示无效值 3位小数 单位A
    U32 APhasePow[NUM_MAX_ROOM];                      //A相功率 0xFFFFFFFF 表示无效值 2位小数 单位w
    U32 BPhasePow[NUM_MAX_ROOM];                      //B相功率 0xFFFFFFFF 表示无效值 2位小数 单位w
    U32 CPhasePow[NUM_MAX_ROOM];                      //C相功率 0xFFFFFFFF 表示无效值 2位小数 单位w
    U32 totalPow[NUM_MAX_ROOM];                       //总功率 0xFFFFFFFF 表示无效值 2位小数 单位w

    U16 animalNum[NUM_MAX_ROOM];       //当前存栏

    //以下内容都变更了，之前这部分内容都是没有完全做好 ---20250421

    U8  activeTime[6];     //设备首次激活时间 全0为未激活 [0]=年,[1]=月,[2]=日,[3]=时,[4]=分,[5]=秒
    U32 verNum;          //版本数值(越大版本越高,用于设备检查主动升级)
    U8  version[17];     //触摸屏程序版本号

    U8 comType;         //0=以太网,1=移动,2=联通,3=电信
    U8 dhcp;            //是否自动分配地址
    U8 localIP[4];      //本机IP地址，4G模式下无效
    U8 mac[6];         //MAC地址

    U8  ICCID[24];      //ICCID
    U8  IMEI[16];       //IMEI
    U8  CSQ;            //CSQ 信号强度

    U32 runTime;         //设备本次运行时间(s)
    U8 power_on_time[6];   //本次开机时间 [0]=年,[1]=月,[2]=日,[3]=时,[4]=分,[5]=秒
    U32 total_runtime;   //总运行时间(s)
    
    U8 avInNowP[NUM_MAX_ROOM];//进风量百分比  ---20250421
    U8 avOutNowP[NUM_MAX_ROOM];//排风量百分比  ---20250421

    float todayPowerUse; //今日用电量 kwh,小于0代表无效 --20250523
    float yesterdayPowerUse; //昨日用电量 kwh,小于0代表无效 --20250523

    U8 readmeUrl[100]; //设备说明书下载地址 --20250528 V20250528A
    U8 rev[912];    //额外预留 --20250528 V20250528A
}__mqState;
#pragma pack()


#pragma pack(1)
typedef struct
{
    //参数头 10Bytes
    U32  pid;                               //产品类型ID
    U16  len;                               //参数内容长度
    U16  crcPara;                           //参数内容crc校验
    U16  crcHead;                           //参数头的crc校验

    //参数内容
    U8   version[6];                        //版本号

    //---生产管理

    //1.栏舍管理
    U8  PM_mode[NUM_MAX_ROOM];              //栏舍模式 0 = 空舍 1 = 在养
    U16 PM_gDay[NUM_MAX_ROOM];              //天龄 1-999
    U8  PM_startTime[NUM_MAX_ROOM][3];      //入栏时间 [0]=年,[1]=月,[2]=日 bin码
    U32 PM_inNum[NUM_MAX_ROOM];             //进栏数量
    U32 PM_outNum[NUM_MAX_ROOM];            //总出栏数量
    U32 PM_deadNum[NUM_MAX_ROOM];           //总死亡数量
    U32 PM_failNum[NUM_MAX_ROOM];           //总淘汰数量


    //2.通风曲线
    U8  PM_dTempMin[NUM_MAX_ROOM];          //最小风量温差
    U8  PM_dTempMax[NUM_MAX_ROOM];          //最大风量温差
    S8  PM_dAVMinPC[NUM_MAX_ROOM];          //最小风量偏差
    S8  PM_dAVMaxPC[NUM_MAX_ROOM];          //最大风量偏差
    S8  PM_dAVTarPC[NUM_MAX_ROOM];          //目标风量偏差

    //3.温度偏移
    U16 PM_targetSTime[NUM_MAX_ROOM][NUM_DTTIME];   //目标温度偏差时段开始时间
    U16 PM_targetETime[NUM_MAX_ROOM][NUM_DTTIME];   //目标温度偏差结束时间
    S16 PM_targetDVal[NUM_MAX_ROOM][NUM_DTTIME];    //目标温度偏差数值


    //4.日常维护(后台不用处理，现场校准)
    U16 PM_calPmAD[NUM_PM][2];                       //电位器 0, 100的校准数值 //---220429
    U8  PM_calDir;                                   //通风窗校准方向 0 = 开 , 1 = 关

    //---控制设置

    //1.环控目标
    U8  targetMode[NUM_MAX_ROOM];                                 //0=目标通风量 1=猪只需求通风 2=温差通风  //---250314  ---20250421修改描述
    //温度曲线
    U16  tempFig_Day[NUM_MAX_ROOM][NUM_MAXTAB_DAY+1];             //温度曲线日龄 第一个为自设模式的参数    ---
    U8   tempFig_lvMin[NUM_MAX_ROOM][NUM_MAXTAB_DAY+1];           //温度曲线最小通风级别 0-Max, 代表1-Max 温差通风模式才有效  //---250314
    U8   tempFig_lvMax[NUM_MAX_ROOM][NUM_MAXTAB_DAY+1];           //温度曲线最大通风级别 0-Max, 代表1-Max 温差通风模式才有效  //---250314
    U16  tempFig_TargetCool[NUM_MAX_ROOM][NUM_MAXTAB_DAY+1];      //温度曲线冷目标                         ---
    U16  tempFig_TargetHeat[NUM_MAX_ROOM][NUM_MAXTAB_DAY+1];      //温度曲线热目标
    U16  tempFig_pigAVMin[NUM_MAX_ROOM][NUM_MAXTAB_DAY+1];        //最小猪只通风需求
    U16  tempFig_pigAVMax[NUM_MAX_ROOM][NUM_MAXTAB_DAY+1];        //最大猪只通风需求
    U16  tempFig_pigAVTar[NUM_MAX_ROOM][NUM_MAXTAB_DAY+1];        //目标猪只通风需求
    S16  targetCoolTH[NUM_MAX_ROOM];                              //目标冷阀值
    S16  targetHeatTH[NUM_MAX_ROOM];                              //目标热阀值
    U8   CPSTempOut[NUM_MAX_ROOM];                                //室外温度自动补偿
    U8   showLevel;                                               //是否显示等级
    U8   showRoomAV;                                              //是否显示房间通风量

    //猪只需求通风
    U8   PN_Humi[NUM_MAX_ROOM][NUM_PIGNEED_HUMI];                                             //猪只需求湿度点
    U16  PN_Day[NUM_MAX_ROOM][NUM_PIGNEED_HUMI][NUM_MAXTAB_DAY+1];                            //猪只需求日龄
    U16  PN_Temp[NUM_MAX_ROOM][NUM_PIGNEED_HUMI][NUM_PN_TEMP];                                //猪只需求温度
    U16  PN_pigAV[NUM_MAX_ROOM][NUM_PIGNEED_HUMI][NUM_MAXTAB_DAY+1][NUM_PN_TEMP];             //猪只需求风量

    //2.通用控制
    U8   fan_mode;                                                  //温度控制模式 0=自设 1=阶跃曲线 2=线性曲线
    U8   fan_windAutoClose;                                         //小窗是否自动关闭, 0 = 不自动关闭, 1 = 当风机和变频风机全部关闭时，小窗自动关闭
    U16  fan_windOpenTime;                                          //提前打开小窗时间 0-9999 s     //---20230104
    U8   fan_maxLevel;                                              //最大通风级别 30
    U16  fan_delayUp;                                               //通风升级延时 1-9999秒
    U16  fan_delayDown;                                             //通风降级延时 1-9999秒

    //U8   fan_NH3Add;                                            //高氨增加通风最大级别 0-3
    //U16  fan_NH3High;                                           //高氨通风数值 1-100
    //U16  fan_NH3_Delay;                                         //高氨通风保持时间(秒) 10-9999
    //U8   fan_CO2Add;                                            //高CO2增加通风最大级别 0-3
    //U16  fan_CO2High;                                           //高CO2通风数值 1-999
    //U16  fan_CO2_Delay;                                         //高CO2通风保持时间(秒) 10-9999

    U8   almVal_DetectBatLow;                                     //低电池电压报警 0=不检测 1=检测  ---20250421新增

    U16  alm_rdDPs;                                               //压差报警回差 0.1 pa ---20250523
    U8   rev[7];                                                  //备用 ---20250523

    //安装-通用设置
    U8   fan_pmDP;                                              //电位器位置误差 1%-10%     ---250314
    U16  fan_pmTO[NUM_PM];                                      //电位器超时时间 1-999s     ---250314
    U8   fan_relayDelay;                                        //继电器开延迟 0-9.9s       ---250314
    U8   rev4;

    //控制-通用控制
    U16  fan_adjTime;                                           //微调风量时间间隔 0-99 秒 ---250314
    
    //控制-通风表
    U8   fan_lvMode;                                            //温差通风模式变频风机调节模式 0=阶跃/1=线性 ---250314
    //3.通风等级
    U8   rev5[NUM_MAX_ROOM][NUM_MAX_FANLEVEL];                          //改为备用字段   ---250314
    
    U8   wind_fan[NUM_MAX_ROOM][NUM_MAX_FANLEVEL][NUM_MAX_FFAN];        //80,  通风表 定速风机模式 0:关 1-99:周期% 100:常开 101-200:轮替1%-100%
    U8   wind_vfan[NUM_MAX_ROOM][NUM_MAX_FANLEVEL][NUM_MAX_VFAN];       //60,  通风表 常开变速风机 0-100, 101-201:轮替 0-100%
    U8   wind_vfanEx[NUM_MAX_ROOM][NUM_MAX_FANLEVEL][NUM_MAX_VFAN];     //变速风机扩展参数
    //U16  wind_vfan[NUM_MAX_ROOM][NUM_MAX_FANLEVEL][NUM_MAX_VFAN];       //bit0-6:[0-100]开启比例 [0-100%]
                                                                        //bit7-13:[0-100]开启占空比[0-100%]
                                                                        //bit14-15:0=固定，1=周期，2=轮流，3=固定
    U8   wind_inPort[NUM_MAX_ROOM][NUM_MAX_FANLEVEL][NUM_MAX_INPORT];    //进风口 0-100%
    U8   wind_outPort[NUM_MAX_ROOM][NUM_MAX_FANLEVEL][NUM_MAX_INPORT];   //出风口 0-100%
    U32  wind_AVTotal[NUM_MAX_ROOM][NUM_MAX_FANLEVEL];                   //通风等级总风量
    U16  wind_cycleTime;                                                 //时控周期时间 1-9999s
    U16  wind_turnTime;                                                  //轮替周期时间 1-9999s


    //4.进风口控制
    U8   ipType[NUM_MAX_INPORT];                                    //进风口类型 0-"未使用",1-"风门",2-"小窗"
    U8   ipMode[NUM_MAX_INPORT];                                    //进风口控制模式 0-基于通风表 1-基于静压
    S16  ipDesDPS[NUM_MAX_INPORT];                                  //进风口目标静压
    S16  ipdDPS[NUM_MAX_INPORT];                                    //进风口静压偏差

    //5.排风口控制
    U8   opType[NUM_MAX_OUTPORT];                                    //进风口类型 0-"未使用",1-"风门",2-"小窗"
    U8   opMode[NUM_MAX_OUTPORT];                                    //进风口控制模式 0-基于通风表 1-基于静压
    S16  opDesDPS[NUM_MAX_OUTPORT];                                  //进风口目标静压
    S16  opdDPS[NUM_MAX_OUTPORT];                                    //进风口静压偏差

    //6.降温控制
    U8   cool_Mode[NUM_MAX_COOL];                                   //制冷模式 0=固定温度 1=天龄曲线
    U8   cool_actMode[NUM_MAX_COOL];                                 //动作模式 0=固定开关比例 1=线性开关比例   ---250314
    //U8   cool_selTemp[NUM_MAX_COOL];                                //温度来源 0=室内 1=室外 **
    U8   rev1[12];
    U8   cool_selHumi[NUM_MAX_COOL];                                //湿度来源 0=室内 1=室外
    U16  cool_Day[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                  //44, 制冷表日龄
    U16  cool_STime[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                //44, 制冷表开始时间
    U16  cool_ETime[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                //44, 制冷表结束时间
    U16  cool_STemp[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                //44, 温度曲线制冷温度
    U16  cool_ETemp[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                //44, 制冷结束温度
    U16  cool_EHumi[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                //44, 制冷表结束湿度
    //U16  cool_On[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                   //44, 开秒
    //U16  cool_Off[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                  //44, 关秒
    U16  cool_Cycle[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                //44, 制冷动作周期时间      ---250314
    //U8   rev6[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                      //保留   ---250314 ---250407 ---20250524 V20250526A
    //U8   rev7[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                      //保留   ---250314 ---250407 ---20250524 V20250526A
    U8   cool_PC[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                   //高温比例 ---20250524 V20250526A
    U8   cool_PCEnd[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];                //低温比例 ---20250524 V20250526A


    //8.加热2组
    U8   heat_Mode[NUM_MAX_HEAT];                                   //加热模式 0=固定温度 1=天龄曲线
    U8   heat_actMode[NUM_MAX_HEAT];                                //动作模式 0=固定开关比例 1=线性开关比例    ---250314
    //U8   heat_selTemp[NUM_MAX_HEAT];                                //温度来源 0=室内 1=室外 **
    U8   rev2[6];
    U16  heat_Day[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                  //66, 加热日龄表
    U16  heat_STime[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                //66, 加热开始时间
    U16  heat_ETime[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                //66, 加热结束时间
    U16  heat_STemp[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                //66, 加热开始温度
    U16  heat_ETemp[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                //66, 加热结束温度
    //U16  heat_On[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                   //66, 开秒
    //U16  heat_Off[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                  //66, 关秒
    U16  heat_Cycle[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                //44, 加热动作周期时间      ---250314
    U8   heat_StartPC[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];              //加热开始动作比例 1-100%   ---250314
    U8   heat_StopPC[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];              //加热结束动作比例 0-100%   ---250314
    
    U8   heat_PC[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                   //低温比例 ---20250523 V20250526A
    //U8   heat_PCMin[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];              //
    U8   heat_PCEnd[NUM_MAX_HEAT][NUM_MAXTAB_DAY+1];                //高温比例 ---20250523 V20250526A


    //9.灯光控制
    U16  light_Start[NUM_MAX_LIGHT];                            //10, 光照开始时间
    U16  light_End[NUM_MAX_LIGHT];                              //10, 光照器结束时间
    U8   light_On[NUM_MAX_LIGHT];                               //5, 光照器开周期 s
    U8   light_Off[NUM_MAX_LIGHT];                              //5, 光照器关周期 s
    U8   light_PC[NUM_MAX_LIGHT];                               //强度



    //10.定时器
    U16  timer_Start[NUM_MAX_TIMER];                            //10, 定时器开始时间
    U16  timer_End[NUM_MAX_TIMER];                              //10, 定时器结束时间
    U8   timer_On[NUM_MAX_TIMER];                               //5, 定时器开周期 s
    U8   timer_Off[NUM_MAX_TIMER];                              //5, 定时器关周期 s
    U8   timer_PC[NUM_MAX_TIMER];                               //强度


    //11.报警参数
    S16  alm_TempHigh;                                           //高温报警
    S16  alm_TempLow;                                            //低温报警
    S16  alm_DTempHigh;                                          //高温差报警
    S16  alm_DTempLow;                                           //低温差报警
    U16  alm_DSTempMax;                                          //探头温差过大报警
    U16  alm_HumiHigh;                                           //室内高湿报警
    U16  alm_HumiLow;                                            //室内低湿报警
    S32  alm_DPSHigh;                                            //高压差报警
    S32  alm_DPSLow;                                             //低压差报警
    S32  alm_exDPSHigh;                                          //外部高压差报警
    S32  alm_exDPSLow;                                           //外部低压差报警
    U32  alm_CO2High;                                            //高二氧化碳报警
    U32  alm_NH3High;                                            //高氨气报警
    U8   almVal_SensorOL;                                        //传感器离线报警
    U8   almVal_DeviceOL;                                        //通讯设备离线报警
    U16  almVal_DeviceOLDelay;                                   //通讯设备离线报警延时 s
    U16  almVal_Delay;                                           //报警延迟 s
    U8   almVal_RepeatEn;                                        //重复提醒
    U16  almVal_RepeatTime;                                      //重复提醒时间
    U8   almVal_FanPCErr;                                        //风机输出偏差告警
    U16  almVal_CheckTime;                                       //报警自检时间点
    U8   almVal_CheckCycle;                                      //报警自检频率
    U16  almVal_CheckDuration;                                   //报警自检持续时间

    //---安装设置

    //1.栏舍设置
    U16  roomIdx[NUM_MAX_ROOM];                                 //房间编号
    U8   roomName[NUM_MAX_ROOM][32];                            //房间名称（暂未使用）
    U8   roomType[NUM_MAX_ROOM];                                //房间类型
    U8   roomFanMode[NUM_MAX_ROOM];                             //通风方式 0=正压 1=微正压 2=负压
    U16  roomM2[NUM_MAX_ROOM];                                  //房间截面积 1位小数

    //2.传感器设置
    //温度
    U8   insTemp_type[NUM_TEMP];                                  //0=未使用 1=温度
    U8   insTemp_room[NUM_TEMP];                                  //0=房间1 1=房间2 2-室外
    S16  insTemp_cal[NUM_TEMP];                                   //温度探头校准值 = 实际 - 原始

    //4-20mA
    U8   ins420mA_type[NUM_420MA];                                //0=未使用 1=湿度 2=二氧探头 3=氨气
    U8   ins420mA_room[NUM_420MA];                                //0=房间1 1=房间2 2=室外
    S16  ins420mA_cal[NUM_420MA];                                 //4-20mA校准值
    S16  ins420mA_20mA[NUM_420MA];                                //0mA对应数值
    S16  ins420mA_0mA[NUM_420MA];                                 //20mA对应数值

    //RS485
    U8   insS485_type[NUM_S485];                                  //0=未使用 1=压差 2=氨气 3-风速 4-二氧化碳
    U8   insS485_module[NUM_S485];                                //型号
                                                                  //压差：0-"/",1-"PA250",2-"PA600" 
                                                                  //氨气：0-"/",1-"PR",2-"DR"
                                                                  //风速：0-"/",1-"WIND-J100"
                                                                  //二氧化碳：0-"/",1-"CO219-B"       
    
    U8   insS485_room[NUM_S485];                                  //0=房间1 1=房间2 2=室外
    U8   insS485_baud[NUM_S485];                                  //0=300,1=600,2=1200,3=2400,4=4800,5=9600,6=19200,7=38400,8=57600,9=115200
    U8   insS485_addr[NUM_S485];                                  //485地址

    //脉冲
    U8   insDI_type[NUM_DI];                                       //0=未使用 1=进风口风速 2=排风口风速
    U8   insDI_room[NUM_DI];                                       //0=房间1 1=房间2
    U8   insDI_windTab[NUM_DI];                                    //风量表

    //风量表A,B
    U16  insDITab_pulse[NUM_DITAB][NUM_MAX_DITAB];                //脉冲数/分钟
    U16  insDITab_speed[NUM_DITAB][NUM_MAX_DITAB];                //风速x100 m/s
    U32  insDITab_flow[NUM_DITAB][NUM_MAX_DITAB];                 //风量 m3/h



    //3.定速风机设置
    U16  insFFan_relayIdx[NUM_MAX_FFAN];                          //继电器编号 0:未启用 主板:1-12 模块1:100-109 ... 模块8:800-809
    U8   insFFan_room[NUM_MAX_FFAN];                              //0=房间1 1=房间2
    U8   insFFan_pType[NUM_MAX_FFAN];                             //类型 0=未使用 1=负压 2=正压
    U32  insFFan_AV[NUM_MAX_FFAN];                                //风量 m3/h

    //4.变速风机设置
    U16  insVFan_PCIdx[NUM_MAX_VFAN];                             //可调输出编号 0:RS485 主板:1-8 模块1:100-115 ... 模块8:800-815
    U16  insVFan_coRelayIdx[NUM_MAX_VFAN];                        //关联继电器编号 0:未启用 主板:1-12 模块1:100-109 ... 模块8:800-809
    U8   insVFan_PCMin[NUM_MAX_VFAN];                             //最小开度
    U8   insVFan_room[NUM_MAX_VFAN];                              //0=房间1 1=房间2
    U8   insVFan_pType[NUM_MAX_VFAN];                             //压力类型 0=未使用 1=负压 2=正压
    U8   insVFan_windTab[NUM_MAX_VFAN];                           //风量表编号
    U8   insVFan_type485[NUM_MAX_VFAN];                           //485型号 0=未使用 1=EC90 ...
    U8   insVFan_addr485[NUM_MAX_VFAN];                           //485地址 0=未使用 1-254

    //变速风机风量表
    U8   insVFanCalPC[NUM_VFTAB][NUM_VFCP];                       //变速风机风量校准点 0-100 %
    U32  insVFanAirVol[NUM_VFTAB][NUM_VFCP];                      //变速风机校准点风量

    //5.6. 进风口排风口设置
    U8   insPort_type[NUM_MAX_INPORT+NUM_MAX_OUTPORT];            //进风口类型 0-"未使用",1-"风门",2-"小窗"
    U8   insPort_room[NUM_MAX_INPORT+NUM_MAX_OUTPORT];            //进风口房间 0=房间1 1=房间2
    U8   insPort_posMode[NUM_MAX_INPORT+NUM_MAX_OUTPORT];         //控制方式 0=时间 1=电位计 2=可调输出
    U8   insPort_PMIdx[NUM_MAX_INPORT+NUM_MAX_OUTPORT];           //位置反馈端 0=无反馈 1-4 = 0-10V 输入端
    U16  insPort_PCIdx[NUM_MAX_INPORT+NUM_MAX_OUTPORT];           //可调输出编号 0:未使用 主板:1-8 模块1:100-107 ... 模块8:800-807
    U16  insPort_relayOnIdx[NUM_MAX_INPORT+NUM_MAX_OUTPORT];      //开继电器编号 0:未启用 主板:1-12 模块1:100-109 ... 模块8:800-809
    U16  insPort_relayOffIdx[NUM_MAX_INPORT+NUM_MAX_OUTPORT];     //关继电器编号 0:未启用 主板:1-12 模块1:100-109 ... 模块8:800-809
    U16  insPort_timeOn[NUM_MAX_INPORT+NUM_MAX_OUTPORT];          //全开时间 0-9999秒
    U16  insPort_timeOff[NUM_MAX_INPORT+NUM_MAX_OUTPORT];         //全关时间 0-9999秒

    //7.降温设置
    U8   insCool_type[NUM_MAX_COOL];                              //降温类型 0=未使用 1=水帘 2=喷雾 3=制冷
    U8   insCool_room[NUM_MAX_COOL];                              //0=房间1 1=房间2（待确认）
    U16  insCool_relayIdx[NUM_MAX_COOL];                          //继电器编号 0:未启用 主板:1-12 模块1:100-109 ... 模块8:800-809


    //8.加热设置
    U8   insHeat_type[NUM_MAX_HEAT];                              //加热类型 0=未使用 1=固定 2=可调
    U8   insHeat_room[NUM_MAX_HEAT];                              //0=房间1 1=房间2（待确认）
    U8   insHeat_moudleIdx[NUM_MAX_HEAT];                         //模块编号 0=本机主板 1-6 外接模块
    U16  insHeat_relayIdx[NUM_MAX_HEAT];                          //继电器编号 0:未启用 主板:1-12 模块1:100-109 ... 模块8:800-809
    U16  insHeat_PCIdx[NUM_MAX_HEAT];                             //可调输出编号 0:未使用 主板:1-8 模块1:100-107 ... 模块8:800-807

    //9.灯光设置
    U8   insLight_type[NUM_MAX_LIGHT];                            //照明类型 0=未使用 1=固定 2=可调
    U8   insLight_room[NUM_MAX_LIGHT];                            //0=房间1 1=房间2（待确认）
    U16  insLight_relayIdx[NUM_MAX_LIGHT];                        //继电器编号 0:未启用 主板:1-12 模块1:100-109 ... 模块8:800-809
    U16  insLight_PCIdx[NUM_MAX_LIGHT];                           //可调输出编号 0:未使用 主板:1-8 模块1:100-107 ... 模块8:800-807

    //10.定时设置
    U8   insTimer_type[NUM_MAX_TIMER];                            //定时类型 0=未使用 1=固定 2=可调
    U8   insTimer_room[NUM_MAX_TIMER];                            //0=房间1 1=房间2（待确认）
    U16  insTimer_relayIdx[NUM_MAX_TIMER];                        //继电器编号 0:未启用 主板:1-12 模块1:100-109 ... 模块8:800-809
    U16  insTimer_PCIdx[NUM_MAX_TIMER];                           //可调输出编号 0:未使用 主板:1-8 模块1:100-107 ... 模块8:800-807

    //11.能耗仪表设置
    U8   insMeter_type[NUM_MAX_METER];          //仪表类型 0=未使用 1=电表SPM93 2=脉冲水表 
    U8   insMeter_if[NUM_MAX_METER];            //0=RS485 1=脉冲
    U8   insMeter_room[NUM_MAX_METER];          //0=房间1 1=房间2
    U8   insMeter_addr[NUM_MAX_METER];          //485地址
    U16  insMeter_pulse[NUM_MAX_METER];         //每L脉冲数

    //12.通讯设置
    U32  addr;                              //控制器地址（只读参数）
    U16  serverPort;                        //平台端口
    U8  serverIP[4];                        //平台IP地址
    U8  localIP[4];                         //本地IP
    U8  gateway[4];                         //网关
    U8  netmask[4];                         //子网掩码
    U8  dhcp;                               //是否自动分配地址
    U8  comType;                            //0=以太网,1=移动,2=联通,3=电信
    U8  groupIP[4];                         //华为云平台地址
    U16 groupPort;                          //华为云平台端口

    //13. 通用设置
    U8   gsRelay12Mode;                     //继电器1，2模式 0=普通 1=应急 默认为0  ---250314

    //13.首页设置
    //U8  showEn[5];                          //室外温度，室外湿度，室内湿度，二氧化碳，室内压差，氨气,今日用电 V20250526A
    //U8  showIdx[5];                         //显示序号 传感器，室外温度，二氧化碳，氨气，电表 V20250526A
    U8 selHome[6];                            //6个显示内容的选取 0-不显示 1-室外温度 2-室外湿度 3-室内湿度 4-二氧化碳 5-室内压差 6-氨气 7-今日用电  V20250526A
    U8 selHomeRev[4];                         //暂不使用，备用 V20250526A

    //14.拓展盒设置
    U8  exModule[NUM_MAX_EXMODULE];         //扩展盒类型 0=无 1=继电器扩展盒(NIS-DO10BOX) 2=AO8扩展盒(NIS-AO8BOX)
    U8  exAddr485[NUM_MAX_EXMODULE];        //扩展盒485地址 0=无效 1-254
    U8  exBaud;                             //拓展盒波特率 0=300,1=600,2=1200,3=2400,4=4800,5=9600,6=19200,7=38400,8=57600,9=115200 ---250314

    //---系统设置

    //1. 时间和语言
    //U16 sys_timeZone;                       //时区
    //U8  sys_language;                       //语言
    //U8  sys_zone;                           //地区
    //U8  sys_province;                       //省
    //U8  sys_city;                           //市
    //U8  sys_distric;                        //区

    U8  sys_syncTime;                         //是否自动同步时间

    //U8   sys_rev[2];                      //---250314

    //2. 通用设置
    U8  sys_light;                          //亮度 1-100% 0-10% 1-20% 2-30% 3-40% 4-50% 5-60% 6-70% 7-80% 8-90% 9-100%
    U8  sys_saveScreen;                     //屏保是否开启
    U16 sys_offTime;                        //息屏时间 按界面索引值依次类推
    U8  sys_room;                           //房舍数量 0=1个 1=2个
    U16 sys_hisTime;                        //数据保存时间 按界面索引值依次类推


    //3. 密码与权限
    U32 sys_password[3];                    //0=普通用户 1=管理员 2=工程师
    U8  sys_authPass[3][4];                 //目前未使用

    //安装 进风口排风口设置
    U8  insPort_vOpen[NUM_MAX_INPORT+NUM_MAX_OUTPORT];        //进风窗开到100的输出电压 0-10V
    U8  insPort_vClose[NUM_MAX_INPORT+NUM_MAX_OUTPORT];       //进风窗关到0的输出电压 0-10V

    //辅助控制
    S16  aux_DPLow[NUM_MAX_ROOM];                           //低压差阀值
    U16  aux_DP_Delay[NUM_MAX_ROOM];                        //低压差检测时间(秒) 1-999 秒
    U8   aux_vpAdd[NUM_MAX_ROOM];                           //低压差正压补偿 0-100%
    U8   aux_vnAdd[NUM_MAX_ROOM];                           //低压差负压补偿 0-100%


    U8   aux_NH3Add[NUM_MAX_ROOM];                          //高氨增加百分比 1-20%
    U16  aux_NH3Start[NUM_MAX_ROOM];                        //高氨增加通风开始数值          ---250314
    U16  aux_NH3Stop[NUM_MAX_ROOM];                         //高氨增加通风结束数值          ---250314

    U8   aux_CO2Add[NUM_MAX_ROOM];                          //高CO2增加百分比 1-20%
    U16  aux_CO2Start[NUM_MAX_ROOM];                        //高CO2增加通风开始数值         ---250314
    U16  aux_CO2Stop[NUM_MAX_ROOM];                         //高CO2增加通风结束数值         ---250314

    U8   aux_enPProtect[NUM_MAX_ROOM];                      //正压保护功能 0=未开启 1=开启

    //闭环控制
    U8   fbc_En[NUM_MAX_ROOM];                              //闭环控制开关 0=关 1=开
    U16  fbc_MaxPC[NUM_MAX_ROOM];                           //最大调整限幅 0-300% 计算输出风量最大比目标大多少
    U8   fbc_Step[NUM_MAX_ROOM];                            //变频风机每次调整的幅度 1%
    U8   fbc_OKZone[NUM_MAX_ROOM];                          //闭环控制容差 5%
    U8   fbc_Alarm;                                         //风量未达报警 0=不报警 1=报警
    U16  fbc_AlarmDelay;                                    //风量未达报警延时(秒) 60s

    //安装-传感器-风量定义
    U8   avdef_windSel[NUM_DI+NUM_S485];                    //风量选择 0=不使用 1=使用
    U16  avdef_area[NUM_DI+NUM_S485];                       //风管面积 XX.XX m2 两位小数
    U16  avdef_portNum[NUM_DI+NUM_S485];                    //风口数量

    //安装-传感器-温度定义
    U8   tempDef_Avg[NUM_MAX_ROOM];                         //每bit代表一个温度探头 bit0表示温度1，bit7表示温度8
    U8   tempDef_Heat[NUM_MAX_HEAT];                        //加热温度定义
    U8   tempDef_Cool[NUM_MAX_COOL];                        //降温温度定义

    //通风表温差
    S16  wind_dTemp[NUM_MAX_ROOM][NUM_MAXTAB_DAY+1][NUM_MAX_FANLEVEL];        //通风等级温差 -20.0 - 30.0 度 ---20250421 修改

    //制冷控制
    U16  cool_StartPC[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];      //制冷开始动作比例 1.0-100.0%   ---250407
    U16  cool_StopPC[NUM_MAX_COOL][NUM_MAXTAB_DAY+1];       //制冷结束动作比例 0.0-100.0%   ---250407

    //制冷安装
    U16  insCool_PCIdx[NUM_MAX_COOL];                      //制冷可调输出编号 0:未使用 主板:1-8 模块1:100-107 ... 模块8:800-807  V20250526A

}__czqPara;
#pragma pack()

#pragma pack(1)
typedef struct
{
    U16         len;            //只读，接口写入忽略
    __czqPara   czqpara;        //
    U8          lang;           //0-Cn 1-En
    U8          sys_password_enable[3]; //用户密码启用
    U8          meterBaud;                                                   //仪表波特率  0=300,1=600,2=1200,3=2400,4=4800,5=9600,6=19200,7=38400,8=57600,9=115200
    
    U8          fanRow[NUM_MAX_FFAN];                                        //定速风机行
    U8          fanCol[NUM_MAX_FFAN];                                        //定速风机列
    U8          vfanRow[NUM_MAX_VFAN];                                      //变速风机行
    U8          vfanCol[NUM_MAX_VFAN];                                      //变速风机列


    U8          rev[1024];
    U32         cs;
}__mqPara;
#pragma pack()